package com.eleaf.adbb.model;

import java.io.File;

/**
 * 定义命名规则并生成对应属性的抽象类
 * 
 * @author dydyt_000
 * 
 */
public interface NameGenerater {

	/**
	 * 生成变量名规则
	 * 
	 * @param id 变量在布局文件中的id
	 * @return 变量名
	 */
	public abstract String generateVariableName( String id );

	/**
	 * JAVA类名规则
	 * 
	 * @param layoutName 布局文件名称，不包含拓展名与路径
	 * @param type 布局文件类型（Activity、Fragment）
	 * @return
	 */
	public abstract String generateClassName( String layoutName, LayoutType type );

	/**
	 * 主包路径(andorid项目中,AndroidManifest.xml中package部分)
	 * 
	 * @return
	 */
	public abstract String generateHostPackage();

	/**
	 * 布局文件所在的对应子包路径
	 * 
	 * @param type 布局文件类型（Activity、Fragment）
	 * @return
	 */
	public abstract String generateLastPackage( LayoutType type );

	/**
	 * 布局文件筛选，所有筛选过程都会交由
	 * CodeGenerater.generate方法所传入的第一个ClassTemplate类型的参数（activityTemplate
	 * ）来调用执行，所以请保证每个ClassTemplate中的NameGenerater.layoutFileFilte完全一致.
	 * 
	 * @param f
	 * @return
	 */
	public abstract boolean layoutFileFilte( File f );

}
